CRAN(The Comprehensive R Archive Network)をクリック(The Institute of Statistical Mathematics, Tokyo)
Download R for Windowsをクリック
baseをクリック
Figure2.Rのインストール方法2
Figure3.Rのインストール方法3
「インストール」と同様の手順でインストール
ToolsをクリックしてGlobal Optionsをクリック
Figure4.Rのバージョンアップ/ダウン方法1
Figure5.Rのバージョンアップ/ダウン方法2
バージョンダウンさせたければ,ここで古いバージョンを選択する
Figure6.Rのバージョンアップ/ダウン方法3
R.versionと打ち,バージョンを確認Figure7.Rのバージョンアップ/ダウン方法4
Figure8.RStudioのインストール方法1
Figure9.RStudioのインストール方法2
Figure10.RStudioの設定1
Figure11.RStudioの設定2
Figure12.RStudioの設定3
Figure13.RStudioの設定4
Figure14.RStudioの設定5
Figure15.RStudioプロジェクトの設定1
Figure16.RStudioプロジェクトの設定2
Figure17.RStudioプロジェクトの設定3
Figure18.RStudioプロジェクトの設定4
Figure19.RStudioプロジェクトの設定5
起動するたびにパッケージを読み込む必要がある
パッケージをインストールしていなければinstall.packages("tidyverse")でインストール
library(tidyverse)
library(palmerpenguins) # サンプルデータ
locale = locale(encoding = "cp932")を指定すれば読み込める# fread(UTF-8)
# tibble型になっていないのでas_tibble()でtibble型にする
df <-
data.table::fread(".csv",
data.table = FALSE) |>
as_tibble()
# vroom(UTF-8)
df <-
vroom::vroom(".csv")
# vroom(cp932)
df <-
vroom::vroom(".csv",
locale = locale(encoding = "cp932"))
df <-
readxl::read_xlsx(".xlsx") |>
as_tibble()
# シートを指定したいときはsheet引数を使う
df <-
read_xlsx(".xlsx",
sheet = "") |>
as_tibble()
penguins
## # A tibble: 344 × 8
## species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
## <fct> <fct> <dbl> <dbl> <int> <int>
## 1 Adelie Torgersen 39.1 18.7 181 3750
## 2 Adelie Torgersen 39.5 17.4 186 3800
## 3 Adelie Torgersen 40.3 18 195 3250
## 4 Adelie Torgersen NA NA NA NA
## 5 Adelie Torgersen 36.7 19.3 193 3450
## 6 Adelie Torgersen 39.3 20.6 190 3650
## 7 Adelie Torgersen 38.9 17.8 181 3625
## 8 Adelie Torgersen 39.2 19.6 195 4675
## 9 Adelie Torgersen 34.1 18.1 193 3475
## 10 Adelie Torgersen 42 20.2 190 4250
## # … with 334 more rows, and 2 more variables: sex <fct>, year <int>
R for Data Science(2e)を参照して作成
“## パッケージを読み込み”を実行してから
==(等しい),>=(以上),>(超),<=(以下),<(未満)などが使える# "species"が"Adelie"のケースを選択する
# count()で"species"を確認
penguins |>
filter(species == "Adelie") |>
count(species)
## # A tibble: 1 × 2
## species n
## <fct> <int>
## 1 Adelie 152
# "bill_length_mm"が"35以上"のケースを選択する
# count()で"bill_length_mm"を確認
penguins |>
filter(bill_length_mm >= 35) |>
count(bill_length_mm)
## # A tibble: 156 × 2
## bill_length_mm n
## <dbl> <int>
## 1 35 2
## 2 35.1 1
## 3 35.2 1
## 4 35.3 1
## 5 35.5 2
## 6 35.6 1
## 7 35.7 3
## 8 35.9 2
## 9 36 4
## 10 36.2 3
## # … with 146 more rows
# "bill_length_mm"が"35超"のケースを選択する
# count()で"bill_length_mm"を確認
penguins |>
filter(bill_length_mm > 35) |>
count(bill_length_mm)
## # A tibble: 155 × 2
## bill_length_mm n
## <dbl> <int>
## 1 35.1 1
## 2 35.2 1
## 3 35.3 1
## 4 35.5 2
## 5 35.6 1
## 6 35.7 3
## 7 35.9 2
## 8 36 4
## 9 36.2 3
## 10 36.3 1
## # … with 145 more rows
# "bill_depth_mm"が"14以下"のケースを選択する
# count()で"bill_depth_mm"を確認
penguins |>
filter(bill_depth_mm <= 14) |>
count(bill_depth_mm)
## # A tibble: 10 × 2
## bill_depth_mm n
## <dbl> <int>
## 1 13.1 1
## 2 13.2 1
## 3 13.3 1
## 4 13.4 1
## 5 13.5 2
## 6 13.6 1
## 7 13.7 6
## 8 13.8 4
## 9 13.9 4
## 10 14 2
# "bill_depth_mm"が"35超"のケースを選択する
# count()で"bill_depth_mm"を確認
penguins |>
filter(bill_depth_mm < 14) |>
count(bill_depth_mm)
## # A tibble: 9 × 2
## bill_depth_mm n
## <dbl> <int>
## 1 13.1 1
## 2 13.2 1
## 3 13.3 1
## 4 13.4 1
## 5 13.5 2
## 6 13.6 1
## 7 13.7 6
## 8 13.8 4
## 9 13.9 4
==(等しい),>=(以上),>(超),<=(以下),<(未満)などが使える
!=でfilterするとNAも削除されることに注意(詳細は後述)
# "species"が"Adelie"のケースを選択しない
# count()で"species"を確認
penguins |>
filter(species != "Adelie") |>
count(species)
## # A tibble: 2 × 2
## species n
## <fct> <int>
## 1 Chinstrap 68
## 2 Gentoo 124
# "bill_length_mm"が"35以上"のケースを選択しない
# count()で"bill_length_mm"を確認
penguins |>
filter(!(bill_length_mm >= 35)) |>
count(bill_length_mm)
## # A tibble: 8 × 2
## bill_length_mm n
## <dbl> <int>
## 1 32.1 1
## 2 33.1 1
## 3 33.5 1
## 4 34 1
## 5 34.1 1
## 6 34.4 1
## 7 34.5 1
## 8 34.6 2
# "bill_length_mm"が"35超"のケースを選択しない
# count()で"bill_length_mm"を確認
penguins |>
filter(!(bill_length_mm > 35)) |>
count(bill_length_mm)
## # A tibble: 9 × 2
## bill_length_mm n
## <dbl> <int>
## 1 32.1 1
## 2 33.1 1
## 3 33.5 1
## 4 34 1
## 5 34.1 1
## 6 34.4 1
## 7 34.5 1
## 8 34.6 2
## 9 35 2
# "bill_depth_mm"が"14以下"のケースを選択しない
# count()で"bill_depth_mm"を確認
penguins |>
filter(!(bill_depth_mm <= 14)) |>
count(bill_depth_mm)
## # A tibble: 70 × 2
## bill_depth_mm n
## <dbl> <int>
## 1 14.1 3
## 2 14.2 6
## 3 14.3 4
## 4 14.4 5
## 5 14.5 8
## 6 14.6 5
## 7 14.7 2
## 8 14.8 3
## 9 14.9 1
## 10 15 10
## # … with 60 more rows
# "bill_depth_mm"が"35超"のケースを選択しない
# count()で"bill_depth_mm"を確認
penguins |>
filter(!(bill_depth_mm < 14)) |>
count(bill_depth_mm)
## # A tibble: 71 × 2
## bill_depth_mm n
## <dbl> <int>
## 1 14 2
## 2 14.1 3
## 3 14.2 6
## 4 14.3 4
## 5 14.4 5
## 6 14.5 8
## 7 14.6 5
## 8 14.7 2
## 9 14.8 3
## 10 14.9 1
## # … with 61 more rows
&(および),|(または)などが使える
|のショートカットに%in%がある
# "species"が"Adelie"で"island"が"Biscoe"のケースを選択する
# count()で"species"と"island"を確認
penguins |>
filter(species == "Adelie" & island == "Biscoe") |>
count(species, island)
## # A tibble: 1 × 3
## species island n
## <fct> <fct> <int>
## 1 Adelie Biscoe 44
# "species"が"Adelie"または"Chinstrap"のケースを選択する
# count()で"species"を確認
# |
penguins |>
filter(species == "Adelie" | species == "Chinstrap") |>
count(species)
## # A tibble: 2 × 2
## species n
## <fct> <int>
## 1 Adelie 152
## 2 Chinstrap 68
# %in%
penguins |>
filter(species %in% c("Adelie", "Chinstrap")) |>
count(species)
## # A tibble: 2 × 2
## species n
## <fct> <int>
## 1 Adelie 152
## 2 Chinstrap 68
&(および),|(または)などが使える
|のショートカットに%in%がある
# "species"が"Adelie"で"island"が"Biscoe"のケースを選択しない
# count()で"species"と"island"を確認
penguins |>
filter(!(species == "Adelie" & island == "Biscoe")) |>
count(species, island)
## # A tibble: 4 × 3
## species island n
## <fct> <fct> <int>
## 1 Adelie Dream 56
## 2 Adelie Torgersen 52
## 3 Chinstrap Dream 68
## 4 Gentoo Biscoe 124
# "species"が"Adelie"または"Chinstrap"のケースを選択しない
# count()で"species"を確認
# |
penguins |>
filter(!(species == "Adelie" | species == "Chinstrap")) |>
count(species)
## # A tibble: 1 × 2
## species n
## <fct> <int>
## 1 Gentoo 124
# %in%
penguins |>
filter(!species %in% c("Adelie", "Chinstrap")) |>
count(species)
## # A tibble: 1 × 2
## species n
## <fct> <int>
## 1 Gentoo 124
# "species"が"Adelie"または"Chinstrap"のケースをまとめて選択する
# count()で"species"を確認
# "Adelie","Chinstrap"を含むオブジェクトを作成
obs <-
c("Adelie", "Chinstrap")
# %in%
penguins |>
filter(species %in% obs) |>
count(species)
## # A tibble: 2 × 2
## species n
## <fct> <int>
## 1 Adelie 152
## 2 Chinstrap 68
# "species"が"Adelie"または"Chinstrap"のケースをまとめて選択する
# count()で"species"を確認
# "Adelie","Chinstrap"を含むオブジェクトを作成
obs <-
c("Adelie", "Chinstrap")
# %in%
penguins |>
filter(!species %in% obs) |>
count(species)
## # A tibble: 1 × 2
## species n
## <fct> <int>
## 1 Gentoo 124
# "fruit"の変数を追加したオブジェクトを作成
df <-
tribble(
~fruit,
"apple",
"banana",
"melon",
"strawberry",
"orange",
"peach",
"green apple")
df
## # A tibble: 7 × 1
## fruit
## <chr>
## 1 apple
## 2 banana
## 3 melon
## 4 strawberry
## 5 orange
## 6 peach
## 7 green apple
# "fruit"の中で"apple"という文字を含むケースを選択する
df |>
filter(str_detect(fruit, "apple"))
## # A tibble: 2 × 1
## fruit
## <chr>
## 1 apple
## 2 green apple
# "fruit"の中で"apple"という文字を含むケースを選択しない
df |>
filter(!str_detect(fruit, "apple"))
## # A tibble: 5 × 1
## fruit
## <chr>
## 1 banana
## 2 melon
## 3 strawberry
## 4 orange
## 5 peach
filter(sex != "male")"でfilterするとNAも削除される
filter(!sex %in% c("male"))"でfilterすればNAは削除されない
# "sex"には"female","male","NA"が入っている
penguins |>
count(sex)
## # A tibble: 3 × 2
## sex n
## <fct> <int>
## 1 female 165
## 2 male 168
## 3 <NA> 11
# "sex != male"として"male"を選択しないようにする
# count()で"sex"を確認
# "NA"も除外されていて"female"のみが選択される
penguins |>
filter(sex != "male") |>
count(sex)
## # A tibble: 1 × 2
## sex n
## <fct> <int>
## 1 female 165
# "NA"を除外せず"male"だけを選択しないようにする
# count()で"sex"を確認
# "female"と"NA"が選択される
penguins |>
filter(!sex %in% c("male")) |>
count(sex)
## # A tibble: 2 × 2
## sex n
## <fct> <int>
## 1 female 165
## 2 <NA> 11
# "sexがNAのケースを選択する
# count()で"sex"を確認
penguins |>
filter(is.na(sex)) |>
count(sex)
## # A tibble: 1 × 2
## sex n
## <fct> <int>
## 1 <NA> 11
drop_naとfilter(!is.na)を使う方法がある
ひとつの変数を扱う場合であればどちらも同じだが,複数の変数を扱う場合はdrop_naのほうが便利そう
# drop_na ----------
## "sexがNAのケースを選択しない
## count()で"sex"を確認
penguins |>
drop_na(sex) |>
count(sex)
## # A tibble: 2 × 2
## sex n
## <fct> <int>
## 1 female 165
## 2 male 168
## 複数の変数の欠損を除く
## filter(is.na)で"sex"の欠損または"bill_length_mm"の欠損を確認
penguins |>
drop_na(sex, bill_length_mm) |>
filter(is.na(sex) | is.na(bill_length_mm))
## # A tibble: 0 × 8
## # … with 8 variables: species <fct>, island <fct>, bill_length_mm <dbl>,
## # bill_depth_mm <dbl>, flipper_length_mm <int>, body_mass_g <int>, sex <fct>,
## # year <int>
# filter(!is.na) ----------
## "sexがNAのケースを選択しない
## count()で"sex"を確認
penguins |>
filter(!is.na(sex)) |>
count(sex)
## # A tibble: 2 × 2
## sex n
## <fct> <int>
## 1 female 165
## 2 male 168
## 複数の変数の欠損を除く
## filter(is.na)で"sex"の欠損または"bill_length_mm"の欠損を確認
penguins |>
filter(!is.na(sex), !is.na(bill_length_mm)) |>
filter(is.na(sex) | is.na(bill_length_mm))
## # A tibble: 0 × 8
## # … with 8 variables: species <fct>, island <fct>, bill_length_mm <dbl>,
## # bill_depth_mm <dbl>, flipper_length_mm <int>, body_mass_g <int>, sex <fct>,
## # year <int>
# "bill_length_mm"を昇順に並び替える
# select()で"bill_length_mm"を確認
penguins |>
arrange(bill_length_mm) |>
select(bill_length_mm)
## # A tibble: 344 × 1
## bill_length_mm
## <dbl>
## 1 32.1
## 2 33.1
## 3 33.5
## 4 34
## 5 34.1
## 6 34.4
## 7 34.5
## 8 34.6
## 9 34.6
## 10 35
## # … with 334 more rows
# "bill_length_mm"を降順に並び替える
# select()で"bill_length_mm"を確認
penguins |>
arrange(desc(bill_length_mm)) |>
select(bill_length_mm)
## # A tibble: 344 × 1
## bill_length_mm
## <dbl>
## 1 59.6
## 2 58
## 3 55.9
## 4 55.8
## 5 55.1
## 6 54.3
## 7 54.2
## 8 53.5
## 9 53.4
## 10 52.8
## # … with 334 more rows
R for Data Science(2e)を参照して作成
“## パッケージを読み込み”を実行してから
matches()を用いた正規表現の詳細は別の章# "species"を選択する
penguins |>
select(species)
## # A tibble: 344 × 1
## species
## <fct>
## 1 Adelie
## 2 Adelie
## 3 Adelie
## 4 Adelie
## 5 Adelie
## 6 Adelie
## 7 Adelie
## 8 Adelie
## 9 Adelie
## 10 Adelie
## # … with 334 more rows
# "species"を選択しない
penguins |>
select(!species)
## # A tibble: 344 × 7
## island bill_length_mm bill_depth_mm flipper_length_… body_mass_g sex year
## <fct> <dbl> <dbl> <int> <int> <fct> <int>
## 1 Torger… 39.1 18.7 181 3750 male 2007
## 2 Torger… 39.5 17.4 186 3800 fema… 2007
## 3 Torger… 40.3 18 195 3250 fema… 2007
## 4 Torger… NA NA NA NA <NA> 2007
## 5 Torger… 36.7 19.3 193 3450 fema… 2007
## 6 Torger… 39.3 20.6 190 3650 male 2007
## 7 Torger… 38.9 17.8 181 3625 fema… 2007
## 8 Torger… 39.2 19.6 195 4675 male 2007
## 9 Torger… 34.1 18.1 193 3475 <NA> 2007
## 10 Torger… 42 20.2 190 4250 <NA> 2007
## # … with 334 more rows
# "species","island","year"を選択する
penguins |>
select(species, island, year)
## # A tibble: 344 × 3
## species island year
## <fct> <fct> <int>
## 1 Adelie Torgersen 2007
## 2 Adelie Torgersen 2007
## 3 Adelie Torgersen 2007
## 4 Adelie Torgersen 2007
## 5 Adelie Torgersen 2007
## 6 Adelie Torgersen 2007
## 7 Adelie Torgersen 2007
## 8 Adelie Torgersen 2007
## 9 Adelie Torgersen 2007
## 10 Adelie Torgersen 2007
## # … with 334 more rows
# "species","island","year"を選択しない
penguins |>
select(!c(species, island, year))
## # A tibble: 344 × 5
## bill_length_mm bill_depth_mm flipper_length_mm body_mass_g sex
## <dbl> <dbl> <int> <int> <fct>
## 1 39.1 18.7 181 3750 male
## 2 39.5 17.4 186 3800 female
## 3 40.3 18 195 3250 female
## 4 NA NA NA NA <NA>
## 5 36.7 19.3 193 3450 female
## 6 39.3 20.6 190 3650 male
## 7 38.9 17.8 181 3625 female
## 8 39.2 19.6 195 4675 male
## 9 34.1 18.1 193 3475 <NA>
## 10 42 20.2 190 4250 <NA>
## # … with 334 more rows
# "species"から"bill_length_mm"を選択する
penguins |>
select(species:bill_length_mm)
## # A tibble: 344 × 3
## species island bill_length_mm
## <fct> <fct> <dbl>
## 1 Adelie Torgersen 39.1
## 2 Adelie Torgersen 39.5
## 3 Adelie Torgersen 40.3
## 4 Adelie Torgersen NA
## 5 Adelie Torgersen 36.7
## 6 Adelie Torgersen 39.3
## 7 Adelie Torgersen 38.9
## 8 Adelie Torgersen 39.2
## 9 Adelie Torgersen 34.1
## 10 Adelie Torgersen 42
## # … with 334 more rows
# "species"から"bill_length_mm"を選択しない
penguins |>
select(!species:bill_length_mm)
## # A tibble: 344 × 5
## bill_depth_mm flipper_length_mm body_mass_g sex year
## <dbl> <int> <int> <fct> <int>
## 1 18.7 181 3750 male 2007
## 2 17.4 186 3800 female 2007
## 3 18 195 3250 female 2007
## 4 NA NA NA <NA> 2007
## 5 19.3 193 3450 female 2007
## 6 20.6 190 3650 male 2007
## 7 17.8 181 3625 female 2007
## 8 19.6 195 4675 male 2007
## 9 18.1 193 3475 <NA> 2007
## 10 20.2 190 4250 <NA> 2007
## # … with 334 more rows
# "species","year"をまとめて選択する
# "species","year"を含むオブジェクトを作成
obs <-
c("species", "year")
# all_of
penguins |>
select(all_of(obs))
## # A tibble: 344 × 2
## species year
## <fct> <int>
## 1 Adelie 2007
## 2 Adelie 2007
## 3 Adelie 2007
## 4 Adelie 2007
## 5 Adelie 2007
## 6 Adelie 2007
## 7 Adelie 2007
## 8 Adelie 2007
## 9 Adelie 2007
## 10 Adelie 2007
## # … with 334 more rows
# any_of
penguins |>
select(any_of(obs))
## # A tibble: 344 × 2
## species year
## <fct> <int>
## 1 Adelie 2007
## 2 Adelie 2007
## 3 Adelie 2007
## 4 Adelie 2007
## 5 Adelie 2007
## 6 Adelie 2007
## 7 Adelie 2007
## 8 Adelie 2007
## 9 Adelie 2007
## 10 Adelie 2007
## # … with 334 more rows
# "species","year"をまとめて選択しない
# "species","year"を含むオブジェクトを作成
obs <-
c("species", "year")
# all_of
penguins |>
select(!all_of(obs))
## # A tibble: 344 × 6
## island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g sex
## <fct> <dbl> <dbl> <int> <int> <fct>
## 1 Torgersen 39.1 18.7 181 3750 male
## 2 Torgersen 39.5 17.4 186 3800 female
## 3 Torgersen 40.3 18 195 3250 female
## 4 Torgersen NA NA NA NA <NA>
## 5 Torgersen 36.7 19.3 193 3450 female
## 6 Torgersen 39.3 20.6 190 3650 male
## 7 Torgersen 38.9 17.8 181 3625 female
## 8 Torgersen 39.2 19.6 195 4675 male
## 9 Torgersen 34.1 18.1 193 3475 <NA>
## 10 Torgersen 42 20.2 190 4250 <NA>
## # … with 334 more rows
# any_of
penguins |>
select(!any_of(obs))
## # A tibble: 344 × 6
## island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g sex
## <fct> <dbl> <dbl> <int> <int> <fct>
## 1 Torgersen 39.1 18.7 181 3750 male
## 2 Torgersen 39.5 17.4 186 3800 female
## 3 Torgersen 40.3 18 195 3250 female
## 4 Torgersen NA NA NA NA <NA>
## 5 Torgersen 36.7 19.3 193 3450 female
## 6 Torgersen 39.3 20.6 190 3650 male
## 7 Torgersen 38.9 17.8 181 3625 female
## 8 Torgersen 39.2 19.6 195 4675 male
## 9 Torgersen 34.1 18.1 193 3475 <NA>
## 10 Torgersen 42 20.2 190 4250 <NA>
## # … with 334 more rows
# ペンギンデータに含まれていない"weight"が入ったobsを作成
obs <-
c("species", "year", "weight")
# all_ofを使うと"weight"がないためエラーになる
penguins |>
select(all_of(obs))
# any_ofを使うと"weight"がなくともエラーにならない
penguins |>
select(any_of(obs))
# "bill"で始まる変数を選択する
# starts_with
penguins |>
select(starts_with("bill"))
## # A tibble: 344 × 2
## bill_length_mm bill_depth_mm
## <dbl> <dbl>
## 1 39.1 18.7
## 2 39.5 17.4
## 3 40.3 18
## 4 NA NA
## 5 36.7 19.3
## 6 39.3 20.6
## 7 38.9 17.8
## 8 39.2 19.6
## 9 34.1 18.1
## 10 42 20.2
## # … with 334 more rows
# matches
penguins |>
select(matches("^bill"))
## # A tibble: 344 × 2
## bill_length_mm bill_depth_mm
## <dbl> <dbl>
## 1 39.1 18.7
## 2 39.5 17.4
## 3 40.3 18
## 4 NA NA
## 5 36.7 19.3
## 6 39.3 20.6
## 7 38.9 17.8
## 8 39.2 19.6
## 9 34.1 18.1
## 10 42 20.2
## # … with 334 more rows
# "bill"で始まる変数を選択しない
# starts_with
penguins |>
select(!starts_with("bill"))
## # A tibble: 344 × 6
## species island flipper_length_mm body_mass_g sex year
## <fct> <fct> <int> <int> <fct> <int>
## 1 Adelie Torgersen 181 3750 male 2007
## 2 Adelie Torgersen 186 3800 female 2007
## 3 Adelie Torgersen 195 3250 female 2007
## 4 Adelie Torgersen NA NA <NA> 2007
## 5 Adelie Torgersen 193 3450 female 2007
## 6 Adelie Torgersen 190 3650 male 2007
## 7 Adelie Torgersen 181 3625 female 2007
## 8 Adelie Torgersen 195 4675 male 2007
## 9 Adelie Torgersen 193 3475 <NA> 2007
## 10 Adelie Torgersen 190 4250 <NA> 2007
## # … with 334 more rows
# matches
penguins |>
select(!matches("^bill"))
## # A tibble: 344 × 6
## species island flipper_length_mm body_mass_g sex year
## <fct> <fct> <int> <int> <fct> <int>
## 1 Adelie Torgersen 181 3750 male 2007
## 2 Adelie Torgersen 186 3800 female 2007
## 3 Adelie Torgersen 195 3250 female 2007
## 4 Adelie Torgersen NA NA <NA> 2007
## 5 Adelie Torgersen 193 3450 female 2007
## 6 Adelie Torgersen 190 3650 male 2007
## 7 Adelie Torgersen 181 3625 female 2007
## 8 Adelie Torgersen 195 4675 male 2007
## 9 Adelie Torgersen 193 3475 <NA> 2007
## 10 Adelie Torgersen 190 4250 <NA> 2007
## # … with 334 more rows
# "mm"で終わる変数を選択する
# ends_with
penguins |>
select(ends_with("mm"))
## # A tibble: 344 × 3
## bill_length_mm bill_depth_mm flipper_length_mm
## <dbl> <dbl> <int>
## 1 39.1 18.7 181
## 2 39.5 17.4 186
## 3 40.3 18 195
## 4 NA NA NA
## 5 36.7 19.3 193
## 6 39.3 20.6 190
## 7 38.9 17.8 181
## 8 39.2 19.6 195
## 9 34.1 18.1 193
## 10 42 20.2 190
## # … with 334 more rows
# matches
penguins |>
select(matches("mm$"))
## # A tibble: 344 × 3
## bill_length_mm bill_depth_mm flipper_length_mm
## <dbl> <dbl> <int>
## 1 39.1 18.7 181
## 2 39.5 17.4 186
## 3 40.3 18 195
## 4 NA NA NA
## 5 36.7 19.3 193
## 6 39.3 20.6 190
## 7 38.9 17.8 181
## 8 39.2 19.6 195
## 9 34.1 18.1 193
## 10 42 20.2 190
## # … with 334 more rows
# "mm"で終わる変数を選択しない
# ends_with
penguins |>
select(!ends_with("mm"))
## # A tibble: 344 × 5
## species island body_mass_g sex year
## <fct> <fct> <int> <fct> <int>
## 1 Adelie Torgersen 3750 male 2007
## 2 Adelie Torgersen 3800 female 2007
## 3 Adelie Torgersen 3250 female 2007
## 4 Adelie Torgersen NA <NA> 2007
## 5 Adelie Torgersen 3450 female 2007
## 6 Adelie Torgersen 3650 male 2007
## 7 Adelie Torgersen 3625 female 2007
## 8 Adelie Torgersen 4675 male 2007
## 9 Adelie Torgersen 3475 <NA> 2007
## 10 Adelie Torgersen 4250 <NA> 2007
## # … with 334 more rows
# matches
penguins |>
select(!matches("mm$"))
## # A tibble: 344 × 5
## species island body_mass_g sex year
## <fct> <fct> <int> <fct> <int>
## 1 Adelie Torgersen 3750 male 2007
## 2 Adelie Torgersen 3800 female 2007
## 3 Adelie Torgersen 3250 female 2007
## 4 Adelie Torgersen NA <NA> 2007
## 5 Adelie Torgersen 3450 female 2007
## 6 Adelie Torgersen 3650 male 2007
## 7 Adelie Torgersen 3625 female 2007
## 8 Adelie Torgersen 4675 male 2007
## 9 Adelie Torgersen 3475 <NA> 2007
## 10 Adelie Torgersen 4250 <NA> 2007
## # … with 334 more rows
# "length"を含む変数を選択する
# contains
penguins |>
select(contains("length"))
## # A tibble: 344 × 2
## bill_length_mm flipper_length_mm
## <dbl> <int>
## 1 39.1 181
## 2 39.5 186
## 3 40.3 195
## 4 NA NA
## 5 36.7 193
## 6 39.3 190
## 7 38.9 181
## 8 39.2 195
## 9 34.1 193
## 10 42 190
## # … with 334 more rows
# matches
penguins |>
select(matches("length"))
## # A tibble: 344 × 2
## bill_length_mm flipper_length_mm
## <dbl> <int>
## 1 39.1 181
## 2 39.5 186
## 3 40.3 195
## 4 NA NA
## 5 36.7 193
## 6 39.3 190
## 7 38.9 181
## 8 39.2 195
## 9 34.1 193
## 10 42 190
## # … with 334 more rows
# "length"を含む変数を選択しない
# contains
penguins |>
select(!contains("length"))
## # A tibble: 344 × 6
## species island bill_depth_mm body_mass_g sex year
## <fct> <fct> <dbl> <int> <fct> <int>
## 1 Adelie Torgersen 18.7 3750 male 2007
## 2 Adelie Torgersen 17.4 3800 female 2007
## 3 Adelie Torgersen 18 3250 female 2007
## 4 Adelie Torgersen NA NA <NA> 2007
## 5 Adelie Torgersen 19.3 3450 female 2007
## 6 Adelie Torgersen 20.6 3650 male 2007
## 7 Adelie Torgersen 17.8 3625 female 2007
## 8 Adelie Torgersen 19.6 4675 male 2007
## 9 Adelie Torgersen 18.1 3475 <NA> 2007
## 10 Adelie Torgersen 20.2 4250 <NA> 2007
## # … with 334 more rows
# matches
penguins |>
select(!matches("length"))
## # A tibble: 344 × 6
## species island bill_depth_mm body_mass_g sex year
## <fct> <fct> <dbl> <int> <fct> <int>
## 1 Adelie Torgersen 18.7 3750 male 2007
## 2 Adelie Torgersen 17.4 3800 female 2007
## 3 Adelie Torgersen 18 3250 female 2007
## 4 Adelie Torgersen NA NA <NA> 2007
## 5 Adelie Torgersen 19.3 3450 female 2007
## 6 Adelie Torgersen 20.6 3650 male 2007
## 7 Adelie Torgersen 17.8 3625 female 2007
## 8 Adelie Torgersen 19.6 4675 male 2007
## 9 Adelie Torgersen 18.1 3475 <NA> 2007
## 10 Adelie Torgersen 20.2 4250 <NA> 2007
## # … with 334 more rows
# x1~x6の変数を追加したオブジェクトを作成
df <-
tribble(
~x1, ~x2, ~x3, ~x4, ~x5, ~x6,
1, 2, 3, 4, 5, 6,
7, 8, 9, 10, 11, 12,
13, 14, 15, 16, 17, 18)
df
## # A tibble: 3 × 6
## x1 x2 x3 x4 x5 x6
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 2 3 4 5 6
## 2 7 8 9 10 11 12
## 3 13 14 15 16 17 18
# x1~x3の変数を選択する
# num_range
df |>
select(num_range("x", 1:3))
## # A tibble: 3 × 3
## x1 x2 x3
## <dbl> <dbl> <dbl>
## 1 1 2 3
## 2 7 8 9
## 3 13 14 15
# matches
df |>
select(matches("x[1-3]"))
## # A tibble: 3 × 3
## x1 x2 x3
## <dbl> <dbl> <dbl>
## 1 1 2 3
## 2 7 8 9
## 3 13 14 15
# x1~x6の変数を追加したオブジェクトを作成
df <-
tribble(
~x1, ~x2, ~x3, ~x4, ~x5, ~x6,
1, 2, 3, 4, 5, 6,
7, 8, 9, 10, 11, 12,
13, 14, 15, 16, 17, 18)
df
## # A tibble: 3 × 6
## x1 x2 x3 x4 x5 x6
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 2 3 4 5 6
## 2 7 8 9 10 11 12
## 3 13 14 15 16 17 18
# x1~x3の変数を選択しない
# num_range
df |>
select(!num_range("x", 1:3))
## # A tibble: 3 × 3
## x4 x5 x6
## <dbl> <dbl> <dbl>
## 1 4 5 6
## 2 10 11 12
## 3 16 17 18
# matches
df |>
select(!matches("x[1-3]"))
## # A tibble: 3 × 3
## x4 x5 x6
## <dbl> <dbl> <dbl>
## 1 4 5 6
## 2 10 11 12
## 3 16 17 18
rename()と同じように変数名を変えられる# "bill_length_mm"を"kuchibashi_length_mm"に変更する
# "bill_length_mm"を"kuchibashi_length_mm"に変更する
# names()で変数名を確認
penguins |>
select(kuchibashi_length_mm = bill_length_mm,
kuchibashi_depth_mm = bill_depth_mm) |>
names()
## [1] "kuchibashi_length_mm" "kuchibashi_depth_mm"
# "bill_length_mm"を"kuchibashi_length_mm"に変更する
# "bill_length_mm"を"kuchibashi_length_mm"に変更する
# names()で変数名を確認
penguins |>
rename(kuchibashi_length_mm = bill_length_mm,
kuchibashi_depth_mm = bill_depth_mm) |>
names()
## [1] "species" "island" "kuchibashi_length_mm"
## [4] "kuchibashi_depth_mm" "flipper_length_mm" "body_mass_g"
## [7] "sex" "year"
# "bill"から始まる変数のとき,"bill"を"kuchibashi"に変更する
# names()で変数名を確認
penguins |>
rename_with(~str_replace(., "bill", "kuchibashi"),
starts_with("bill")) |>
names()
## [1] "species" "island" "kuchibashi_length_mm"
## [4] "kuchibashi_depth_mm" "flipper_length_mm" "body_mass_g"
## [7] "sex" "year"
# "_mm"で終わる変数のとき,"_mm"を削除する
# names()で変数名を確認
penguins |>
rename_with(~str_replace(., "_mm", ""),
ends_with("_mm")) |>
names()
## [1] "species" "island" "bill_length" "bill_depth"
## [5] "flipper_length" "body_mass_g" "sex" "year"
# "sex"が"male"のとき,"bill","flipper","body"を含む変数に接頭辞"male_"をつける
# names()で変数名を確認
penguins |>
filter(sex == "male") |>
rename_with(~str_c("male_", .),
matches("bill|flipper|body")) |>
names()
## [1] "species" "island" "male_bill_length_mm"
## [4] "male_bill_depth_mm" "male_flipper_length_mm" "male_body_mass_g"
## [7] "sex" "year"
# "sex"が"male"のとき,"bill","flipper","body"を含む変数に接尾辞"_male"をつける
# names()で変数名を確認
penguins |>
filter(sex == "male") |>
rename_with(~str_c(., "_male"),
matches("bill|flipper|body")) |>
names()
## [1] "species" "island" "bill_length_mm_male"
## [4] "bill_depth_mm_male" "flipper_length_mm_male" "body_mass_g_male"
## [7] "sex" "year"
# "body_mass_kg"を新たに追加する
# "body_mass_kg"は"body_mass_g"を1000で割ったもの
# "body_mass_kg"は一番右側に作られる
# select()で"body_mass_g"と"body_mass_kg"を確認
penguins |>
mutate(body_mass_kg = body_mass_g / 1000) |>
select(body_mass_g, body_mass_kg)
## # A tibble: 344 × 2
## body_mass_g body_mass_kg
## <int> <dbl>
## 1 3750 3.75
## 2 3800 3.8
## 3 3250 3.25
## 4 NA NA
## 5 3450 3.45
## 6 3650 3.65
## 7 3625 3.62
## 8 4675 4.68
## 9 3475 3.48
## 10 4250 4.25
## # … with 334 more rows
.beforeが使える# ".before = 1"とすると一番目の変数の前に加わる
penguins |>
mutate(body_mass_kg = body_mass_g / 1000,
.before = 1)
## # A tibble: 344 × 9
## body_mass_kg species island bill_length_mm bill_depth_mm flipper_length_mm
## <dbl> <fct> <fct> <dbl> <dbl> <int>
## 1 3.75 Adelie Torgersen 39.1 18.7 181
## 2 3.8 Adelie Torgersen 39.5 17.4 186
## 3 3.25 Adelie Torgersen 40.3 18 195
## 4 NA Adelie Torgersen NA NA NA
## 5 3.45 Adelie Torgersen 36.7 19.3 193
## 6 3.65 Adelie Torgersen 39.3 20.6 190
## 7 3.62 Adelie Torgersen 38.9 17.8 181
## 8 4.68 Adelie Torgersen 39.2 19.6 195
## 9 3.48 Adelie Torgersen 34.1 18.1 193
## 10 4.25 Adelie Torgersen 42 20.2 190
## # … with 334 more rows, and 3 more variables: body_mass_g <int>, sex <fct>,
## # year <int>
# ".before = body_mass_g"とすると"body_mass_g"の前に加わる
penguins |>
mutate(body_mass_kg = body_mass_g / 1000,
.before = body_mass_g)
## # A tibble: 344 × 9
## species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_kg
## <fct> <fct> <dbl> <dbl> <int> <dbl>
## 1 Adelie Torgersen 39.1 18.7 181 3.75
## 2 Adelie Torgersen 39.5 17.4 186 3.8
## 3 Adelie Torgersen 40.3 18 195 3.25
## 4 Adelie Torgersen NA NA NA NA
## 5 Adelie Torgersen 36.7 19.3 193 3.45
## 6 Adelie Torgersen 39.3 20.6 190 3.65
## 7 Adelie Torgersen 38.9 17.8 181 3.62
## 8 Adelie Torgersen 39.2 19.6 195 4.68
## 9 Adelie Torgersen 34.1 18.1 193 3.48
## 10 Adelie Torgersen 42 20.2 190 4.25
## # … with 334 more rows, and 3 more variables: body_mass_g <int>, sex <fct>,
## # year <int>
.afterが使える# ".after = 1"とすると一番目の変数の後に加わる
penguins |>
mutate(body_mass_kg = body_mass_g / 1000,
.after = 1)
## # A tibble: 344 × 9
## species body_mass_kg island bill_length_mm bill_depth_mm flipper_length_mm
## <fct> <dbl> <fct> <dbl> <dbl> <int>
## 1 Adelie 3.75 Torgersen 39.1 18.7 181
## 2 Adelie 3.8 Torgersen 39.5 17.4 186
## 3 Adelie 3.25 Torgersen 40.3 18 195
## 4 Adelie NA Torgersen NA NA NA
## 5 Adelie 3.45 Torgersen 36.7 19.3 193
## 6 Adelie 3.65 Torgersen 39.3 20.6 190
## 7 Adelie 3.62 Torgersen 38.9 17.8 181
## 8 Adelie 4.68 Torgersen 39.2 19.6 195
## 9 Adelie 3.48 Torgersen 34.1 18.1 193
## 10 Adelie 4.25 Torgersen 42 20.2 190
## # … with 334 more rows, and 3 more variables: body_mass_g <int>, sex <fct>,
## # year <int>
# ".after = body_mass_g"とすると"body_mass_g"の後に加わる
penguins |>
mutate(body_mass_kg = body_mass_g / 1000,
.after = body_mass_g)
## # A tibble: 344 × 9
## species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
## <fct> <fct> <dbl> <dbl> <int> <int>
## 1 Adelie Torgersen 39.1 18.7 181 3750
## 2 Adelie Torgersen 39.5 17.4 186 3800
## 3 Adelie Torgersen 40.3 18 195 3250
## 4 Adelie Torgersen NA NA NA NA
## 5 Adelie Torgersen 36.7 19.3 193 3450
## 6 Adelie Torgersen 39.3 20.6 190 3650
## 7 Adelie Torgersen 38.9 17.8 181 3625
## 8 Adelie Torgersen 39.2 19.6 195 4675
## 9 Adelie Torgersen 34.1 18.1 193 3475
## 10 Adelie Torgersen 42 20.2 190 4250
## # … with 334 more rows, and 3 more variables: body_mass_kg <dbl>, sex <fct>,
## # year <int>
keepが使える# ".keep = "used""とすると使った変数のみが表示される
penguins |>
mutate(body_mass_kg = body_mass_g / 1000,
.keep = "used")
## # A tibble: 344 × 2
## body_mass_g body_mass_kg
## <int> <dbl>
## 1 3750 3.75
## 2 3800 3.8
## 3 3250 3.25
## 4 NA NA
## 5 3450 3.45
## 6 3650 3.65
## 7 3625 3.62
## 8 4675 4.68
## 9 3475 3.48
## 10 4250 4.25
## # … with 334 more rows
# "bill_length_mm_cm","flipper_length_mm_cm"を新たに追加する
# "bill_length_mm_cm"は"bill_length_mm"を10で割ったもの(flipper_lengthも同じ)
# select()で"bill_length_mm"と"bill_length_mm_cm","flipper_length_mm"と"flipper_length_mm_cm"を確認
# c()
penguins |>
mutate(across(c(bill_length_mm, flipper_length_mm),
list(cm = ~ (. / 10)))) |>
select(bill_length_mm, bill_length_mm_cm, flipper_length_mm, flipper_length_mm_cm)
## # A tibble: 344 × 4
## bill_length_mm bill_length_mm_cm flipper_length_mm flipper_length_mm_cm
## <dbl> <dbl> <int> <dbl>
## 1 39.1 3.91 181 18.1
## 2 39.5 3.95 186 18.6
## 3 40.3 4.03 195 19.5
## 4 NA NA NA NA
## 5 36.7 3.67 193 19.3
## 6 39.3 3.93 190 19
## 7 38.9 3.89 181 18.1
## 8 39.2 3.92 195 19.5
## 9 34.1 3.41 193 19.3
## 10 42 4.2 190 19
## # … with 334 more rows
# ends_with
penguins |>
mutate(across(ends_with("length_mm"),
list(cm = ~ (. / 10)))) |>
select(bill_length_mm, bill_length_mm_cm, flipper_length_mm, flipper_length_mm_cm)
## # A tibble: 344 × 4
## bill_length_mm bill_length_mm_cm flipper_length_mm flipper_length_mm_cm
## <dbl> <dbl> <int> <dbl>
## 1 39.1 3.91 181 18.1
## 2 39.5 3.95 186 18.6
## 3 40.3 4.03 195 19.5
## 4 NA NA NA NA
## 5 36.7 3.67 193 19.3
## 6 39.3 3.93 190 19
## 7 38.9 3.89 181 18.1
## 8 39.2 3.92 195 19.5
## 9 34.1 3.41 193 19.3
## 10 42 4.2 190 19
## # … with 334 more rows
# "body_mass_3000"を新たに追加する
# "body_mass_3000"は"body_mass_g"が"3000以上"の場合は"1",そうでない場合は"0"のもの
# count()で"body_mass_g"と"body_mass_3000"を確認
penguins |>
mutate(body_mass_3000 = if_else(body_mass_g >= 3000, 1, 0)) |>
count(body_mass_g, body_mass_3000)
## # A tibble: 95 × 3
## body_mass_g body_mass_3000 n
## <int> <dbl> <int>
## 1 2700 0 1
## 2 2850 0 2
## 3 2900 0 4
## 4 2925 0 1
## 5 2975 0 1
## 6 3000 1 2
## 7 3050 1 4
## 8 3075 1 1
## 9 3100 1 1
## 10 3150 1 4
## # … with 85 more rows
# "body_mass_3000"を新たに追加する
# "body_mass_3000"は"body_mass_g"が"3000以上"の場合は"1",そうでない場合は"0"のもの
# count()で"body_mass_g"と"body_mass_3000"を確認
# "body_mass_g"がNAのものは"不明"とする
penguins |>
mutate(
body_mass_range = case_when(
body_mass_g <= 3000 ~ "~3000",
body_mass_g <= 4000 ~ "~4000",
body_mass_g <= 5000 ~ "~5000",
body_mass_g <= 6000 ~ "~6000",
body_mass_g >= 6000 ~ "6000~",
is.na(body_mass_g) ~ "不明")) |>
count(body_mass_g, body_mass_range)
## # A tibble: 95 × 3
## body_mass_g body_mass_range n
## <int> <chr> <int>
## 1 2700 ~3000 1
## 2 2850 ~3000 2
## 3 2900 ~3000 4
## 4 2925 ~3000 1
## 5 2975 ~3000 1
## 6 3000 ~3000 2
## 7 3050 ~4000 4
## 8 3075 ~4000 1
## 9 3100 ~4000 1
## 10 3150 ~4000 4
## # … with 85 more rows
| 関数 | 用途 | |
|---|---|---|
| as.character | 文字列型に変更する | |
| as.factor | 因子型に変更する | |
| as.numeric | 数値型に変更する |
# "year"を文字列型に変更する
# count()で"year"の型を確認
penguins |>
mutate(
year = as.character(year)
) |>
count(year)
## # A tibble: 3 × 2
## year n
## <chr> <int>
## 1 2007 110
## 2 2008 114
## 3 2009 120
# "year"を因子型に変更する
# count()で"year"の型を確認
penguins |>
mutate(
year = as.factor(year)
) |>
count(year)
## # A tibble: 3 × 2
## year n
## <fct> <int>
## 1 2007 110
## 2 2008 114
## 3 2009 120
# "year"を数値型に変更する
# count()で"year"の型を確認
penguins |>
mutate(
year = as.numeric(year)
) |>
count(year)
## # A tibble: 3 × 2
## year n
## <dbl> <int>
## 1 2007 110
## 2 2008 114
## 3 2009 120
# "sex"の"male"を"1"に,"female"を"2"に変更する
# count()で"sex"を確認
penguins |>
mutate(
sex = fct_recode(sex, "1" = "male",
"2" = "female")) |>
count(sex)
## # A tibble: 3 × 2
## sex n
## <fct> <int>
## 1 2 165
## 2 1 168
## 3 <NA> 11
# "fruit"と"color"の変数を追加したオブジェクトを作成
df <-
tribble(
~fruit, ~color,
"apple", "red",
"banana", "yellow",
"melon", "blue"
)
df
## # A tibble: 3 × 2
## fruit color
## <chr> <chr>
## 1 apple red
## 2 banana yellow
## 3 melon blue
# "fruit"の"melon"の"color"を"green"に変更,それ以外の"color"はそのままとする
df |>
mutate(color = case_when(
fruit == "melon" ~ "green",
TRUE ~ color))
## # A tibble: 3 × 2
## fruit color
## <chr> <chr>
## 1 apple red
## 2 banana yellow
## 3 melon green
# "fruit"と"color"の変数を追加したオブジェクトを作成
df <-
tribble(
~fruit, ~color,
"apple", "red",
"banana", "yellow",
"melon", "blue"
)
df
## # A tibble: 3 × 2
## fruit color
## <chr> <chr>
## 1 apple red
## 2 banana yellow
## 3 melon blue
# "fruit"を"melon","banana","apple"の順に並び替える
df |>
mutate(fruit = fct_relevel(fruit,
"melon",
"banana",
"apple")) |>
arrange(fruit)
## # A tibble: 3 × 2
## fruit color
## <fct> <chr>
## 1 melon blue
## 2 banana yellow
## 3 apple red
# x1~x3,y1~y3の変数を追加したオブジェクトを作成
df <-
tribble(
~x1, ~x2, ~x3, ~y1, ~y2, ~y3,
1, 2, 3, 4, 1, 2,
3, 4, 1, 2, 3, 4,
1, 2, 3, 4, 1, 2)
# x1~x3を逆転処理する(4件法の場合)
# count()で"x1"と逆転処理した"x1_r"を確認
df |>
mutate(
across(x1:x3,
list(r = ~(5 -.))
)
) |>
count(x1, x1_r)
## # A tibble: 2 × 3
## x1 x1_r n
## <dbl> <dbl> <int>
## 1 1 4 2
## 2 3 2 1
# x1~x2の変数を追加したオブジェクトを作成
df <-
tribble(
~x1, ~x2,
0.123, 0.901,
0.234, 0.890,
0.345, 0.789,
0.456, 0.678,
0.567, 0.567,
0.678, 0.456,
0.789, 0.345,
0.890, 0.234,
0.901, 0.123)
# ひとつの変数で小数第二位を切り捨てる
df |>
mutate(x1_kirisute = trunc(x1 * 100) / 100)
## # A tibble: 9 × 3
## x1 x2 x1_kirisute
## <dbl> <dbl> <dbl>
## 1 0.123 0.901 0.12
## 2 0.234 0.89 0.23
## 3 0.345 0.789 0.34
## 4 0.456 0.678 0.45
## 5 0.567 0.567 0.56
## 6 0.678 0.456 0.67
## 7 0.789 0.345 0.78
## 8 0.89 0.234 0.89
## 9 0.901 0.123 0.9
# 複数の変数で小数第二位を切り捨てる
df |>
mutate(across(starts_with("x"),
list(kirisute = ~trunc(. * 100) / 100)))
## # A tibble: 9 × 4
## x1 x2 x1_kirisute x2_kirisute
## <dbl> <dbl> <dbl> <dbl>
## 1 0.123 0.901 0.12 0.9
## 2 0.234 0.89 0.23 0.89
## 3 0.345 0.789 0.34 0.78
## 4 0.456 0.678 0.45 0.67
## 5 0.567 0.567 0.56 0.56
## 6 0.678 0.456 0.67 0.45
## 7 0.789 0.345 0.78 0.34
## 8 0.89 0.234 0.89 0.23
## 9 0.901 0.123 0.9 0.12
round()は四捨五入ではないため使用しない平均値,標準偏差,人数などを算出する
平均値,標準偏差などはna.rm = TRUEを入れないと欠損がある場合NAになってしまう
人数は!is.na()を入れることで欠損を抜いて合計する
# 平均値(mean)
penguins |>
summarize(bill_length_mm_mean = mean(bill_length_mm, na.rm = TRUE))
## # A tibble: 1 × 1
## bill_length_mm_mean
## <dbl>
## 1 43.9
# 標準偏差(sd)
penguins |>
summarize(bill_length_mm_sd = sd(bill_length_mm, na.rm = TRUE))
## # A tibble: 1 × 1
## bill_length_mm_sd
## <dbl>
## 1 5.46
# 人数(sum)
penguins |>
summarize(bill_length_mm_n = sum(!is.na(bill_length_mm)))
## # A tibble: 1 × 1
## bill_length_mm_n
## <int>
## 1 342
# "bill_length_mm"と"bill_depth_mm"の平均値,標準偏差,人数
penguins |>
summarize(across(c(bill_length_mm, bill_depth_mm),
list(mean = ~mean(., na.rm = TRUE),
sd = ~sd(., na.rm = TRUE),
n = ~sum(!is.na(.)))))
## # A tibble: 1 × 6
## bill_length_mm_mean bill_length_mm_sd bill_length_mm_n bill_depth_mm_mean
## <dbl> <dbl> <int> <dbl>
## 1 43.9 5.46 342 17.2
## # … with 2 more variables: bill_depth_mm_sd <dbl>, bill_depth_mm_n <int>
層別に(グループ化して)扱いたいときはgroup_by()を使う
層別(グループ化)を解除したいときはungroup()を使う
# "species"ごとに"bill_length_mm"と"bill_depth_mm"の平均値,標準偏差,人数
penguins |>
group_by(species) |>
summarize(across(c(bill_length_mm, bill_depth_mm),
list(mean = ~mean(., na.rm = TRUE),
sd = ~sd(., na.rm = TRUE),
n = ~sum(!is.na(.)))))
## # A tibble: 3 × 7
## species bill_length_mm_m… bill_length_mm_… bill_length_mm_n bill_depth_mm_m…
## <fct> <dbl> <dbl> <int> <dbl>
## 1 Adelie 38.8 2.66 151 18.3
## 2 Chinstrap 48.8 3.34 68 18.4
## 3 Gentoo 47.5 3.08 123 15.0
## # … with 2 more variables: bill_depth_mm_sd <dbl>, bill_depth_mm_n <int>
pivot_longer(data, cols, names_to = "name", values_to = "value")
pivot_longer(cols = col1:col2, names_to = "names", values_to = "value")colsにはピボットする必要がある変数を入れる
select()と同じでヘルパー関数も使用可能names_toにはcolsで選んだ変数名を格納する変数名をつける
values_toにはcolsで選んだ値を格納する変数名をつける
Figure20.pivot_longerの説明1(Wickham & Grolemund, Figure6.4)
# var,col1,col2の変数を追加したオブジェクトを作成
df <- tribble(
~var, ~col1, ~col2,
"A", 1, 2,
"B", 3, 4,
"C", 5, 6
)
df
## # A tibble: 3 × 3
## var col1 col2
## <chr> <dbl> <dbl>
## 1 A 1 2
## 2 B 3 4
## 3 C 5 6
# col1とcol2をピボットしたいので,cols = col1:col2とする
# 選んだ変数名を"names"という名前の変数に格納したいので,names_to = "names"とする
# 選んだ変数の値を"value"という名前の変数に格納したいので,values_to = "value"とする
df |>
pivot_longer(
cols = col1:col2,
names_to = "names",
values_to = "value"
)
## # A tibble: 6 × 3
## var names value
## <chr> <chr> <dbl>
## 1 A col1 1
## 2 A col2 2
## 3 B col1 3
## 4 B col2 4
## 5 C col1 5
## 6 C col2 6
pivot_longer(data, cols, names_to = "name", names_sep = NULL, values_to = "value")
pivot_longer(cols = !var, names_to = c("name", "number"), names_sep = "_", values_to = "value")colsにはピボットする必要がある変数を入れる
select()と同じでヘルパー関数も使用可能names_toにはcolsで選んだ変数名を格納する変数名をつける
names_sepには変数名を分割する区切りを入れる
values_toにはcolsで選んだ値を格納する変数名をつける
Figure21.pivot_longerの説明2(Wickham & Grolemund, Figure6.6)
# var,x_1,y_2の変数を追加したオブジェクトを作成
df <- tribble(
~var, ~x_1, ~y_2,
"A", 1, 2,
"B", 3, 4,
"C", 5, 6
)
df
## # A tibble: 3 × 3
## var x_1 y_2
## <chr> <dbl> <dbl>
## 1 A 1 2
## 2 B 3 4
## 3 C 5 6
# var以外の変数をピボットしたいので,cols = !varとする
# 選んだ変数名を"name","number"という名前の変数に格納したいので,names_to = c("name", "number")とする
# 選んだ変数の値を"value"という名前の変数に格納したいので,values_to = "value"とする
df |>
pivot_longer(
cols = !var,
names_to = c("name", "number"),
names_sep = "_",
values_to = "value"
)
## # A tibble: 6 × 4
## var name number value
## <chr> <chr> <chr> <dbl>
## 1 A x 1 1
## 2 A y 2 2
## 3 B x 1 3
## 4 B y 2 4
## 5 C x 1 5
## 6 C y 2 6
pivot_longer(data, cols, names_to = "name", names_sep = NULL)
pivot_longer(cols = !var, names_to = c(".value", "id"), names_sep = "_")colsにはピボットする必要がある変数を入れる
select()と同じでヘルパー関数も使用可能names_toにはcolsで選んだ変数名を格納する変数名をつける
".value"を使うnames_sepには変数名を分割する区切りを入れる
Figure22.pivot_longerの説明3(Wickham & Grolemund, Figure6.7)
# var,x_1,x_2,y_1,y_2の変数を追加したオブジェクトを作成
df <- tribble(
~var, ~x_1, ~x_2, ~y_1, ~y_2,
"A", 1, 2, 3, 4,
"B", 5, 6, 7, 8
)
df
## # A tibble: 2 × 5
## var x_1 x_2 y_1 y_2
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 A 1 2 3 4
## 2 B 5 6 7 8
# var以外の変数をピボットしたいので,cols = !varとする
# 選んだ変数名のうち"x_1"か"x_2"ならば"x","y_1"か"y_2"ならば"y"という名前の変数に格納したいので,names_toに".value"を入れる
# 加えて"x_1"か"y_1"ならば"1","x_2"か"y_2"ならば"2"を"id"という名前の変数に格納したいので,names_toに"id"も入れる
df |>
pivot_longer(
cols = !var,
names_to = c(".value", "id"),
names_sep = "_"
) |>
select(var, x:y, id)
## # A tibble: 4 × 4
## var x y id
## <chr> <dbl> <dbl> <chr>
## 1 A 1 3 1
## 2 A 2 4 2
## 3 B 5 7 1
## 4 B 6 8 2
names_patternで変数名を自由に分割できる
正規表現の詳細は別の章
正規表現のよく使う例
| 正規表現 | 用途 | 用例 | 結果 |
|---|---|---|---|
| . | 新しい行を除くすべての文字 | “.” | abc ABC 123 .!?(){} |
| ^a | 文字列で始まる | “^a” | aaa |
| a$ | 文字列で終わる | “a$” | aaa |
| a+ | 1以上 | “a+” | .a.aa.aaa |
| a{n} | n | “a{2}” | .a.aa.aaa |
| a{n,} | n以上 | “a{2,}” | .a.aa.aaa |
ここでは1つめのアンダーバーの前が1文字のため(.{1})_(.*)"としている
2文字であれば(.{2})_(.*)",
3文字以内であれば(.{1,3})_(.*)"などで対応できる
# var,x_m,x_sd,x_all_percent, y_m,y_sd, y_all_percentの変数を追加したオブジェクトを作成
df <- tribble(
~var, ~x_m, ~x_sd, ~x_all_percent, ~y_m, ~y_sd, ~y_all_percent,
"A", 1, 2, 3, 4, 5, 6,
"B", 7, 8, 9, 10, 11, 12
)
df
## # A tibble: 2 × 7
## var x_m x_sd x_all_percent y_m y_sd y_all_percent
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 A 1 2 3 4 5 6
## 2 B 7 8 9 10 11 12
# var以外の変数をピボットしたいので,cols = !varとする
# 選んだ変数名のうち"x_m"か"x_sd"ならば"x","y_1"か"y_2"ならば"y"で"item"という名前の変数に格納したいので,names_toに"item"を入れる
# 加えて"m","sd","all_percent"という名前の変数を作りたいので,names_toに".value"も入れる
# "x_m","x_sd","x_all_percent"ならば"x_","y_m","y_sd","y_all_percent"ならば"y_"で分割したいので,names_patternに"(.{1})_(.*)"を入れる
# "(.{1})_(.*)"とは"任意の1文字_任意の文字を0文字以上"ということを意味する
df |>
pivot_longer(
cols = !var,
names_to = c("item", ".value"),
names_pattern = "(.{1})_(.*)"
)
## # A tibble: 4 × 5
## var item m sd all_percent
## <chr> <chr> <dbl> <dbl> <dbl>
## 1 A x 1 2 3
## 2 A y 4 5 6
## 3 B x 7 8 9
## 4 B y 10 11 12
# var,m_x,sd_x,all_percent_x, m_y,sd_y, all_percent_yの変数を追加したオブジェクトを作成
df <- tribble(
~var, ~m_x, ~sd_x, ~all_percent_x, ~m_y, ~sd_y, ~all_percent_y,
"A", 1, 2, 3, 4, 5, 6,
"B", 7, 8, 9, 10, 11, 12
)
df
## # A tibble: 2 × 7
## var m_x sd_x all_percent_x m_y sd_y all_percent_y
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 A 1 2 3 4 5 6
## 2 B 7 8 9 10 11 12
# var以外の変数をピボットしたいので,cols = !varとする
# 選んだ変数名のうち"m_x"か"m_y"ならば"m","sd_x"か"sd_y"ならば"sd","all_percent_x"か"all_percent_y"ならば"all_percent"で"item"という名前の変数に格納したいので,names_toに"item"を入れる
# 加えて"x","y"という名前の変数を作りたいので,names_toに".value"も入れる
# "m_x","sd_x","all_percent_x"ならば"_x","m_y","sd_y","all_percent_y"ならば"_y"で分割したいので,names_patternに"(.*)_(.*)"を入れる
# "(.*)_(.*)"とは"任意の文字を0文字以上_任意の文字を0文字以上"ということを意味する
df |>
pivot_longer(
cols = !var,
names_to = c("item", ".value"),
names_pattern = "(.*)_(.*)"
)
## # A tibble: 6 × 4
## var item x y
## <chr> <chr> <dbl> <dbl>
## 1 A m 1 4
## 2 A sd 2 5
## 3 A all_percent 3 6
## 4 B m 7 10
## 5 B sd 8 11
## 6 B all_percent 9 12
names_prefixで指定の文字を削除できる# var,x_1,x_2,y_1,y_2の変数を追加したオブジェクトを作成
df <- tribble(
~var, ~x_1, ~x_2, ~y_1, ~y_2,
"A", 1, 2, 3, 4,
"B", 5, 6, 7, 8
)
df
## # A tibble: 2 × 5
## var x_1 x_2 y_1 y_2
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 A 1 2 3 4
## 2 B 5 6 7 8
df |>
pivot_longer(
cols = !var,
names_prefix = "x_|y_"
)
## # A tibble: 8 × 3
## var name value
## <chr> <chr> <dbl>
## 1 A 1 1
## 2 A 2 2
## 3 A 1 3
## 4 A 2 4
## 5 B 1 5
## 6 B 2 6
## 7 B 1 7
## 8 B 2 8
values_drop_naで欠損ケースを削除できる# var,x_1,x_2,y_1,y_2の変数を追加したオブジェクトを作成
# varが"C"のケースは,すべての変数が欠損している
df <- tribble(
~var, ~x_1, ~x_2, ~y_1, ~y_2,
"A", 1, 2, 3, 4,
"B", 5, 6, 7, 8,
"C", NA, NA, NA, NA
)
df
## # A tibble: 3 × 5
## var x_1 x_2 y_1 y_2
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 A 1 2 3 4
## 2 B 5 6 7 8
## 3 C NA NA NA NA
# values_drop_naを入れない場合
df |>
pivot_longer(
cols = !var,
names_to = c(".value", "id"),
names_sep = "_")
## # A tibble: 6 × 4
## var id x y
## <chr> <chr> <dbl> <dbl>
## 1 A 1 1 3
## 2 A 2 2 4
## 3 B 1 5 7
## 4 B 2 6 8
## 5 C 1 NA NA
## 6 C 2 NA NA
# values_drop_naを入れた場合
df |>
pivot_longer(
cols = !var,
names_to = c(".value", "id"),
names_sep = "_",
values_drop_na = TRUE)
## # A tibble: 4 × 4
## var id x y
## <chr> <chr> <dbl> <dbl>
## 1 A 1 1 3
## 2 A 2 2 4
## 3 B 1 5 7
## 4 B 2 6 8
pivot_wider(data, id_cols = NULL, names_from = name, values_from = value)
pivot_wider(names_from = name, values_from = value)names_fromには新しく変数名になる変数を入れる
values_fromには変形したい値を入れる
# id,name,valueの変数を追加したオブジェクトを作成
df <- tribble(
~id, ~name, ~value,
"A", "x", 1,
"B", "y", 2,
"B", "x", 3,
"A", "y", 4,
"A", "z", 5)
df
## # A tibble: 5 × 3
## id name value
## <chr> <chr> <dbl>
## 1 A x 1
## 2 B y 2
## 3 B x 3
## 4 A y 4
## 5 A z 5
# "name"に入っている値を変数名にしたいので,names_from = nameとする
# "value"に入っている値を変形に使いたいので,values_from = valueとする
df |>
pivot_wider(
names_from = name,
values_from = value
)
## # A tibble: 2 × 4
## id x y z
## <chr> <dbl> <dbl> <dbl>
## 1 A 1 4 5
## 2 B 3 2 NA
# 最初からname,valueという変数であれば,names_fromとvalues_fromは省略可能
df |>
pivot_wider()
## # A tibble: 2 × 4
## id x y z
## <chr> <dbl> <dbl> <dbl>
## 1 A 1 4 5
## 2 B 3 2 NA
pivot_wider(data, id_cols = NULL, names_from = name, values_from = value)
pivot_wider(names_from = c(item, answer), values_from = percent)names_fromには新しく変数名になる変数を入れる
values_fromには変形したい値を入れる
# item,answer,percentの変数を追加したオブジェクトを作成
df <- tribble(
~item, ~answer, ~percent,
"A", 1, 10,
"A", 2, 40,
"A", 3, 40,
"A", 4, 10,
"B", 1, 10,
"B", 2, 40,
"B", 3, 40,
"B", 4, 10)
df
## # A tibble: 8 × 3
## item answer percent
## <chr> <dbl> <dbl>
## 1 A 1 10
## 2 A 2 40
## 3 A 3 40
## 4 A 4 10
## 5 B 1 10
## 6 B 2 40
## 7 B 3 40
## 8 B 4 10
# "item"と"answer"に入っている値を変数名にしたいので,names_from = c(item, answer)とする
# "percent"に入っている値を変形に使いたいので,values_from = percentとする
df |>
pivot_wider(
names_from = c(item, answer),
values_from = percent
)
## # A tibble: 1 × 8
## A_1 A_2 A_3 A_4 B_1 B_2 B_3 B_4
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 10 40 40 10 10 40 40 10
Figure23.inner_joinの説明(Wickham & Grolemund, 13.5.1)
x <- tribble(
~key, ~val_x,
1, "x1",
2, "x2",
3, "x3"
)
x
## # A tibble: 3 × 2
## key val_x
## <dbl> <chr>
## 1 1 x1
## 2 2 x2
## 3 3 x3
y <- tribble(
~key, ~val_y,
1, "y1",
2, "y2",
4, "y3"
)
y
## # A tibble: 3 × 2
## key val_y
## <dbl> <chr>
## 1 1 y1
## 2 2 y2
## 3 4 y3
x |>
inner_join(y, by = "key")
## # A tibble: 2 × 3
## key val_x val_y
## <dbl> <chr> <chr>
## 1 1 x1 y1
## 2 2 x2 y2
左のデータフレームのケースと両変数が保持され,一致しないケースはNAになる
最も一般的に使用される
Figure24.left_joinの説明(Wickham & Grolemund, 13.5.2)
x |>
left_join(y, by = "key")
## # A tibble: 3 × 3
## key val_x val_y
## <dbl> <chr> <chr>
## 1 1 x1 y1
## 2 2 x2 y2
## 3 3 x3 <NA>
Figure25.right_joinの説明(Wickham & Grolemund, 13.5.2)
x |>
right_join(y, by = "key")
## # A tibble: 3 × 3
## key val_x val_y
## <dbl> <chr> <chr>
## 1 1 x1 y1
## 2 2 x2 y2
## 3 4 <NA> y3
Figure26.full_joinの説明(Wickham & Grolemund, 13.5.2)
x |>
full_join(y, by = "key")
## # A tibble: 4 × 3
## key val_x val_y
## <dbl> <chr> <chr>
## 1 1 x1 y1
## 2 2 x2 y2
## 3 3 x3 <NA>
## 4 4 <NA> y3
Figure27.semi_joinの説明(Wickham & Grolemund, 13.5.2)
x |>
semi_join(y, by = "key")
## # A tibble: 2 × 2
## key val_x
## <dbl> <chr>
## 1 1 x1
## 2 2 x2
Figure28.anti_joinの説明(Wickham & Grolemund, 13.5.2)
x |>
anti_join(y, by = "key")
## # A tibble: 1 × 2
## key val_x
## <dbl> <chr>
## 1 3 x3
by = c("a", "b")と複数指定できるx <- tribble(
~key, ~key2, ~val_x,
1, "A", "x1",
2, "A", "x2",
2, "B", "x3"
)
x
## # A tibble: 3 × 3
## key key2 val_x
## <dbl> <chr> <chr>
## 1 1 A x1
## 2 2 A x2
## 3 2 B x3
y <- tribble(
~key, ~key2, ~val_y,
1, "A", "y1",
2, "A", "y2",
2, "C", "y3"
)
x |>
left_join(y, by = c("key", "key2"))
## # A tibble: 3 × 4
## key key2 val_x val_y
## <dbl> <chr> <chr> <chr>
## 1 1 A x1 y1
## 2 2 A x2 y2
## 3 2 B x3 <NA>
by = c("a" = "b")と指定できるx <- tribble(
~key, ~val_x,
1, "x1",
2, "x2",
3, "x3"
)
x
## # A tibble: 3 × 2
## key val_x
## <dbl> <chr>
## 1 1 x1
## 2 2 x2
## 3 3 x3
y <- tribble(
~id, ~val_y,
1, "y1",
2, "y2",
4, "y3"
)
x |>
left_join(y, by = c("key" = "id"))
## # A tibble: 3 × 3
## key val_x val_y
## <dbl> <chr> <chr>
## 1 1 x1 y1
## 2 2 x2 y2
## 3 3 x3 <NA>
x <- tribble(
~key, ~val_x,
1, "x1",
2, "x2",
3, "x3"
)
x
## # A tibble: 3 × 2
## key val_x
## <dbl> <chr>
## 1 1 x1
## 2 2 x2
## 3 3 x3
y <- tribble(
~key, ~val_x,
4, "y1",
5, "y2",
6, "y3"
)
x |>
bind_rows(y)
## # A tibble: 6 × 2
## key val_x
## <dbl> <chr>
## 1 1 x1
## 2 2 x2
## 3 3 x3
## 4 4 y1
## 5 5 y2
## 6 6 y3
# "period"の変数を追加したオブジェクトを作成
df <-
tribble(
~var, ~period,
"A", "2020/1/1~2020/1/31",
"B", "2020/1/1~2020/3/31",
"C", "2020/4/1~2020/5/31",
"D", "2020/6/1~2020/10/31")
# "period"を"period_from"と"period_to"の2つの日付変数に分割
# remove = FALSEを入れることで他の変数も保持される
df <-
df |>
separate(period,
into = c("period_from", "period_to"),
sep = "~",
remove = FALSE)
# "period_from"と"period_to"を日付型に変更
df <-
df |>
mutate(across(starts_with("period_"),
~lubridate::ymd(.)))
# period_fromが2020/4/1以降に絞る
df |>
filter(period_from >= "2020/4/1")
## # A tibble: 2 × 4
## var period period_from period_to
## <chr> <chr> <date> <date>
## 1 C 2020/4/1~2020/5/31 2020-04-01 2020-05-31
## 2 D 2020/6/1~2020/10/31 2020-06-01 2020-10-31
# "fruit"と"color"の変数を追加したオブジェクトを作成
df <-
tribble(
~fruit, ~color,
"apple", "red",
"banana", "yellow",
"melon", "green",
"apple", "green",
"banana", "yellow",
"apple", "blue")
df
## # A tibble: 6 × 2
## fruit color
## <chr> <chr>
## 1 apple red
## 2 banana yellow
## 3 melon green
## 4 apple green
## 5 banana yellow
## 6 apple blue
# get_dupes()の中に変数を指定しない場合,すべての変数を使って重複を見つける
# "banana"が2ケース重複している
# 重複していないケースは返ってこない
df |>
janitor::get_dupes()
## # A tibble: 2 × 3
## fruit color dupe_count
## <chr> <chr> <int>
## 1 banana yellow 2
## 2 banana yellow 2
# get_dupes()の中に変数を指定する場合,指定した変数を使って重複を見つける
# "apple"が3ケース,"banana"が2ケース重複している
# 重複していないケースは返ってこない
df |>
janitor::get_dupes(fruit)
## # A tibble: 5 × 3
## fruit dupe_count color
## <chr> <int> <chr>
## 1 apple 3 red
## 2 apple 3 green
## 3 apple 3 blue
## 4 banana 2 yellow
## 5 banana 2 yellow
# "fruit"と"color"の変数を追加したオブジェクトを作成
df <-
tribble(
~fruit, ~color,
"apple", "red",
"banana", "yellow",
"melon", "green",
"apple", "green",
"banana", "yellow",
"apple", "blue")
df
## # A tibble: 6 × 2
## fruit color
## <chr> <chr>
## 1 apple red
## 2 banana yellow
## 3 melon green
## 4 apple green
## 5 banana yellow
## 6 apple blue
# "apple","banana"の重複を削除
df |>
distinct()
## # A tibble: 5 × 2
## fruit color
## <chr> <chr>
## 1 apple red
## 2 banana yellow
## 3 melon green
## 4 apple green
## 5 apple blue
# distinct()の中に変数を指定しない場合,すべての変数を使って重複を削除する
# "banana"の重複が削除
df |>
distinct()
## # A tibble: 5 × 2
## fruit color
## <chr> <chr>
## 1 apple red
## 2 banana yellow
## 3 melon green
## 4 apple green
## 5 apple blue
# distinct()の中に変数を指定する場合,指定した変数を使って重複を削除する
# "apple"の重複,"banana"の重複が削除
# .keep_all = TRUEを入れることで他の変数も保持される
df |>
distinct(fruit, .keep_all = TRUE)
## # A tibble: 3 × 2
## fruit color
## <chr> <chr>
## 1 apple red
## 2 banana yellow
## 3 melon green
if_elseが使える# "flag"変数に"bill_length_mm"が"35以上"のときに1,そうでないときに0を入れる
# count()で"bill_length_mm"と"flag"を確認
# print()で20行目まで確認
penguins |>
mutate(flag = if_else(bill_length_mm >= 35, 1, 0)) |>
count(bill_length_mm, flag) |>
print(n = 20)
## # A tibble: 165 × 3
## bill_length_mm flag n
## <dbl> <dbl> <int>
## 1 32.1 0 1
## 2 33.1 0 1
## 3 33.5 0 1
## 4 34 0 1
## 5 34.1 0 1
## 6 34.4 0 1
## 7 34.5 0 1
## 8 34.6 0 2
## 9 35 1 2
## 10 35.1 1 1
## 11 35.2 1 1
## 12 35.3 1 1
## 13 35.5 1 2
## 14 35.6 1 1
## 15 35.7 1 3
## 16 35.9 1 2
## 17 36 1 4
## 18 36.2 1 3
## 19 36.3 1 1
## 20 36.4 1 2
## # … with 145 more rows
# var,xの変数を追加したオブジェクトを作成
df <- tribble(
~var, ~x,
"A","yes",
"B", NA,
"C","yes",
"D", NA
)
df
## # A tibble: 4 × 2
## var x
## <chr> <chr>
## 1 A yes
## 2 B <NA>
## 3 C yes
## 4 D <NA>
# "flag"変数に"x"が"yes"のときに1,欠損のときに0を入れる
df |>
mutate(flag = if_else(is.na(x), 0, 1))
## # A tibble: 4 × 3
## var x flag
## <chr> <chr> <dbl>
## 1 A yes 1
## 2 B <NA> 0
## 3 C yes 1
## 4 D <NA> 0
case_whenが使える# "flag"変数に"bill_length_mm"が"50以上"のときに"50-",40以上のときに"40-50",30以上のときに"30-40"を入れる
# count()で"bill_length_mm"と"flag"を確認
penguins |>
mutate(flag = case_when(bill_length_mm >= 50 ~ "50-",
bill_length_mm >= 40 ~ "40-50",
bill_length_mm >= 30 ~ "30-40")) |>
count(bill_length_mm, flag)
## # A tibble: 165 × 3
## bill_length_mm flag n
## <dbl> <chr> <int>
## 1 32.1 30-40 1
## 2 33.1 30-40 1
## 3 33.5 30-40 1
## 4 34 30-40 1
## 5 34.1 30-40 1
## 6 34.4 30-40 1
## 7 34.5 30-40 1
## 8 34.6 30-40 2
## 9 35 30-40 2
## 10 35.1 30-40 1
## # … with 155 more rows
# "flag"変数に"bill_length_mm"が"50以上"のときに"50-",40以上のときに"40-50",30以上のときに"30-40"を入れる
# count()で"bill_length_mm"と"flag"を確認
penguins |>
mutate(flag = case_when(bill_length_mm >= 50 ~ "50-",
bill_length_mm >= 40 ~ "40-50",
bill_length_mm >= 30 ~ "30-40")) |>
count(bill_length_mm, flag)
## # A tibble: 165 × 3
## bill_length_mm flag n
## <dbl> <chr> <int>
## 1 32.1 30-40 1
## 2 33.1 30-40 1
## 3 33.5 30-40 1
## 4 34 30-40 1
## 5 34.1 30-40 1
## 6 34.4 30-40 1
## 7 34.5 30-40 1
## 8 34.6 30-40 2
## 9 35 30-40 2
## 10 35.1 30-40 1
## # … with 155 more rows
# "fruit"の変数を追加したオブジェクトを作成
df <-
tribble(
~fruit,
"apple",
"banana",
"melon",
"strawberry",
"orange",
"peach",
"green apple")
df
## # A tibble: 7 × 1
## fruit
## <chr>
## 1 apple
## 2 banana
## 3 melon
## 4 strawberry
## 5 orange
## 6 peach
## 7 green apple
# "new_fruit"変数に"fruit"が"green apple"のときに"apple",それ以外は"fruit"を入れる
df |>
mutate(new_fruit = case_when(fruit == "green apple" ~ "apple",
TRUE ~ fruit))
## # A tibble: 7 × 2
## fruit new_fruit
## <chr> <chr>
## 1 apple apple
## 2 banana banana
## 3 melon melon
## 4 strawberry strawberry
## 5 orange orange
## 6 peach peach
## 7 green apple apple
library(stringr)
sample_see <- c("abc ABC 123\t.!?\\(){}\n")
any whitespace
\sを使う
# スペース
str_view_all(sample_see, "\\s")
any digit
\dを使う
# 数字
str_view_all(sample_see, "\\d")
any word character
\wを使う
# 文字
str_view_all(sample_see, "\\w")
lowercase letters
[:lower:]を使う
# 小文字
str_view_all(sample_see, "[:lower:]")
uppercase letters
[:upper:]を使う
# 大文字
str_view_all(sample_see, "[:upper:]")
punctuation
[:punct:]を使う
# 句読点
str_view_all(sample_see, "[:punct:]")
every character except a new line
.を使う
# 新しい行を除くすべての文字
str_view_all(sample_see, ".")
sample_alt <- c("abcde")
or
ab|dを使う
# "ab"または"d"がつく文字列
str_view_all(sample_alt, "ab|d")
one of
[abe]を使う
# "a"または"b"または"e"がつく文字列
str_view_all(sample_alt, "[abe]")
anything but
[^abe]を使う
# "a"または"b"または"e"がつかない文字列
str_view_all(sample_alt, "[^abe]")
range
[a-c]を使う
# "a"~"c"の文字列
str_view_all(sample_alt, "[a-c]")
sample_anchor <- c("aaa")
start of string
^aを使う
# "a"で始まる文字列
str_view_all(sample_anchor, "^a")
end of string
a$を使う
# "a"で終わる文字列
str_view_all(sample_anchor, "a$")
sample_quant <- c(".a.aa.aaa")
zero or one
a?を使う
# "a"が0か1
str_view_all(sample_quant, "a?")
zero or more
a*を使う
# "a"が0以上
str_view_all(sample_quant, "a*")
one or more
a+を使う
# "a"が1以上
str_view_all(sample_quant, "a+")
exactly n
a{n}を使う
# "a"が2個
str_view_all(sample_quant, "a{2}")
n or more
a{n,}を使う
# "a"が2個以上
str_view_all(sample_quant, "a{2,}")
between n and m
a{n,m}を使う
# "a"が2~4個
str_view_all(sample_quant, "a{2,4}")
# resultフォルダに"penguins.xlsx"を格納
write_csv(penguins,
file = "result/penguins.csv")
# 日付オブジェクトの作成
# 出力時に日付の8桁が自動で挿入されるようにする
today <-
lubridate::today() |>
str_replace_all("-", "")
# resultフォルダに"penguins_xxxxxxxx(日付).xlsx"を格納
write_csv(penguins,
file = str_c("result/penguins_", today, ".csv"))
# resultフォルダに"penguins.xlsx"を格納
writexl::write_xlsx(penguins,
path = "result/penguins.xlsx")
# 日付オブジェクトの作成
# 出力時に日付の8桁が自動で挿入されるようにする
today <-
lubridate::today() |>
str_replace_all("-", "")
# resultフォルダに"penguins_xxxxxxxx(日付).xlsx"を格納
writexl::write_xlsx(penguins,
path = str_c("result/penguins_", today, ".xlsx"))